package accessstruct;

/**
 * @Classname Node
 * @Description
 * @Date
 * @Created by kevin
 *         Node[] access = new Node[5];
 *         access[0] = new Node(new int[]{4,4}, new int[]{1,2,3,4});
 *         access[1] = new Node(1);
 *         access[2] = new Node(2);
 *         access[3] = new Node(3);
 *         access[4] = new Node(4);
 *         access[0].secretShare = bp.getZr().newElement(10);
 */
import it.unisa.dia.gas.jpbc.Element;

import java.util.Arrays;

//构造访问结构的基本类
public class Node {
    /* gate用两个数(t,n)表示，n表示子节点个数, t表示门限值， 如果是叶子节点，则为null*/
    public int[] gate;
    /* children表示内部节点，此字段为子节点索引列表，如果是叶子节点，则为null*/
    public int[] children;
    /* att表示属性值，如果是内部节点，此字段null*/
    public int att;
    /*对应的秘密值*/
    public Element secretShare;

    /* 用于秘密恢复，表示此节点是否可以恢复*/
    public boolean valid;


    /**
     * 内部节点的构造方法
     * @param gate
     * @param children
     */
    public Node(int[] gate, int[] children){
        this.gate = gate;
        this.children = children;
    }


    /**
     * 叶子节点的构造方法
     * @param att
     */
    public Node(int att){
        this.att = att;
    }

    /**
     * 判断是否为叶子节点
     * @return
     */
    public boolean isLeaf() {
        return this.children==null ? true : false;
    }

    /**
     * 将数字转化成字符串进行存储
     * @return
     */
    @Override
    public String toString() {
        if (this.isLeaf()){
            return Integer.toString(this.att);
        }
        else {
            return Arrays.toString(this.gate);
        }
    }
}

